package com.angel.data.generator.interfaces;

import java.io.Serializable;
import java.util.Collection;

import com.angel.dao.generic.factory.DAOFactory;
import com.angel.dao.generic.interfaces.GenericDAO;

/** The class' functionality is generate data for a domain object. It must be declare all its
 * data generator dependencies, and DAO to persist data.
 *
 * @author William
 *
 */
public interface DataGenerator {

	/** Find all dependencies classes.
	 *
	 * @return a dependencies classes array.
	 */
	public Class<? extends DataGenerator>[] getDependecesGenerators();

	/** Generate data objects.
	 *
	 * @param dataCollection to adds objects to generates.
	 */
	public void generateData(Collection<Object> dataCollection, DAOFactory daoFactory);

	/**
	 *
	 * @return
	 */
	public Class<? extends Object> getDataGeneratorClass();

	/**
	 *
	 * @return
	 */
	public GenericDAO<Object, Serializable> getGenericDAO();

}
